package com.itzou.service;

import jakarta.validation.constraints.NotNull;

/**
 * 任务调度器服务接口
 *
 * @author Zou
 */
public interface TaskSchedulerService {

    /**
     * 启动定时任务
     *
     * @param cronExpression Cron 表达式
     * @param serviceName    服务名称
     * @param serviceMethod  服务方法名称
     */
    boolean startScheduledTask(String cronExpression, String serviceName, String serviceMethod);

    /**
     * 停止指定任务
     *
     * @param serviceName   服务名称
     * @param serviceMethod 服务方法名称
     * @return
     */
    boolean stopScheduledTask(String serviceName, String serviceMethod);

    /**
     * 停止所有任务
     */
    void stopAllScheduledTasks();

    /**
     * 生成任务唯一标识
     *
     * @param serviceName    服务名称
     * @param serviceMethod  服务方法名称
     * @return 任务唯一标识
     */
    String generateTaskKey(String serviceName, String serviceMethod);

    /**
     * 获取可运行的任务
     *
     * @param serviceMethod 服务方法名称
     * @param service       服务实例
     * @return 可运行的任务
     */
    @NotNull
    Runnable getRunnable(String serviceMethod, Object service);
}